/* c01/ejemplo-05.c
Eventos del teclado en SDL
*/
#include <SDL/SDL.h>
#include <stdio.h>
#define ANCHO 640
#define ALTO 480

void mostrarEstado(SDL_KeyboardEvent *tecla){
	if (tecla->type == SDL_KEYUP){
		printf("SOLTADA:    ");	
	} else { //SDL_KEYDOWN
		printf("PRESIONADA: ");
	}
}

void mostrarModificadores(SDL_KeyboardEvent * tecla){
	SDLMod modificador = tecla->keysym.mod;
	if (modificador & KMOD_NUM) printf("NUMLOCK ");
	if (modificador & KMOD_CAPS) printf("CAPSLOCK ");
	if (modificador & KMOD_MODE) printf("MODE ");
	if (modificador & KMOD_LCTRL) printf("LCTRL ");
	if (modificador & KMOD_RCTRL) printf("RCTRL ");
	if (modificador & KMOD_LSHIFT) printf("LSHIFT ");
	if (modificador & KMOD_RSHIFT) printf("RSHIFT ");
	if (modificador & KMOD_LALT) printf("LALT ");
	if (modificador & KMOD_RALT) printf("RALT ");
	if (modificador & KMOD_LMETA) printf("LMETA ");
	if (modificador & KMOD_RMETA) printf("RMETA ");
}

/*
	Consultar el archivo:
	/usr/include/SDL/SDL_keysym.h
	Allí se encuentra la declaración de las teclas
	en forma de constantes
*/
void mostrarTecla(SDL_KeyboardEvent *tecla){
	printf("Código: %d, Nombre: %s\n", tecla->keysym.sym, SDL_GetKeyName(tecla->keysym.sym));
}

int main(void){
	SDL_Surface *pantalla = NULL;
	SDL_Event evento;
	int corriendo = 1;

	if (SDL_Init(SDL_INIT_VIDEO) < 0){
		printf("Error al iniciar SDL: %s\n", SDL_GetError());
		exit(1);
	}
	atexit(SDL_Quit);
	
	pantalla = SDL_SetVideoMode(ANCHO, ANCHO, 0, SDL_SWSURFACE);
	if (pantalla == NULL){
		fprintf(stderr, "No se puede establecer el modo de video %dx%d: %s\n", ANCHO, ALTO, SDL_GetError());
		exit(1);
	}
	
	SDL_WM_SetCaption("Prueba de teclado, presione las teclas", NULL);
	
	while(corriendo){
		while(SDL_PollEvent(&evento)){
			switch(evento.type){
				case SDL_KEYDOWN:
				
				case SDL_KEYUP:
					mostrarEstado(&evento.key);
					mostrarModificadores(&evento.key);
					mostrarTecla(&evento.key);
					break;
	
				case SDL_QUIT:
					corriendo = 0;
					break;
			}
		}
	}
	return 0;
}
